﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using Sistema_Totem.Logica.Clases;
using Sistema_Totem.Datos.SqlServer;
using AjaxControlToolkit;

namespace Sistema_Totem.Vista.ERS
{
    public partial class ModificarErsSeccionesVacias : System.Web.UI.Page
    {
        private List<String> RetrievedValues;
        private int auxi = 0;
        private int auxj = 0;
        private int auxk = 0;
        private String aux = "";
        private String NombreProyecto = "ProyectoPrueba";

        private String postdata = "../ERS/ModificarErsSeccionesDisponibles.aspx";

        private SqlServerErs sqlers;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //if (Session["tipo_usuario"].ToString() != "Gerente de Proyecto" && Session["tipo_usuario"].ToString() != "Analista")
                //{
                //    Response.Redirect("~/Vista/Login/Login1.aspx");
                //}
                //Proyecto proy = (Proyecto)Session["objProyecto"];
                ////NombreProyecto= /*Recibe el nombre de proyecto*/
                //if (proy.Nombre.ToString() != null)
                //{
                //    NombreProyecto = proy.Nombre.ToString();
                //}
            }
            catch (NullReferenceException)
            {
                //Response.Redirect("~/Vista/Login/Login1.aspx");
            }            
            
            sqlers = new SqlServerErs();
            RetrievedValues = new List<String>();
            RecibirData(NombreProyecto);
            
            if (!IsPostBack)
            {


            }
            BotonSiguiente.Attributes.Add("onclick", "return confirm('¿Seguro que desea seguir?');");
            BotonAtras.Attributes.Add("onclick", "return confirm('¿Seguro que desea volver?');");
            BotonCancelar.Attributes.Add("onclick", "return confirm('¿Seguro que desea cancelar?');");
        }


        /// <summary>
        /// Recore los accordionpanes contenidos en el acordionCtrl y dentro de los panes
        /// recorre los gridviews, verificando los elementos marcados y concatenandolos
        /// en un String para ser enviados por post a la siguiente pantalla. Tambien
        /// se concatena y se envia el nombre de las secciones las cuales contienen
        /// elementos seleccionados
        /// </summary>
        protected void RecoleccionRespuesta()
        {
            Boolean primero = true;
            for (int i = 0; i < AccordionCtrl.Panes.Count; i++)
            {
                for (int j = 0; j < AccordionCtrl.Panes[i].ContentContainer.Controls.Count; j++)
                {
                    Object ctr = new Control();
                    ctr = AccordionCtrl.Panes[i].ContentContainer.Controls[j];
                    if (ctr is GridView)
                    {
                        GridView Grid = ctr as GridView;
                        String[] NombreSeccion = null;
                        if (primero)
                        {
                            NombreSeccion = Grid.ID.Split('@');
                            postdata += "?SECCION" + i + "=" + NombreSeccion[1];
                            primero = false;
                        }
                        else
                        {
                            NombreSeccion = Grid.ID.Split('@');
                            postdata += "&SECCION" + i + "=" + NombreSeccion[1];
                        }
                        int k = 0;
                        foreach (GridViewRow fila in Grid.Rows)
                        {
                            CheckBox check = (CheckBox)fila.FindControl("chkElementoEscoger" + auxj);
                            if (check.Checked)
                            {
                                postdata += "&ELEMENTO" + i + "" + k + "=" + fila.Cells[0].Text;
                                k++;
                            }
                            auxj++;
                        }
                    }
                }
            }
        }


        /// <summary>
        /// Declara y llena el accordionpane usando una variables auxilirar
        /// de gridview para introducirle la lista de elementos correspondiente 
        /// a la seccion que recibe. Tambien marca los elementos que ya han
        /// sido editados haciendo una comparacion
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        /// <param name="NombreSeccion">Contiene el nombre de la seccion</param>
        protected void LlenaAcordionPane(String NombreProyecto, String NombreSeccion)
        {
            RetrievedValues = RecibirElementos2(NombreProyecto, NombreSeccion);

            if (RetrievedValues.Count > 0)
            {
                AccordionPane auxacc = new AccordionPane();
                auxacc.ID = "AccordionPane" + NombreSeccion;
                auxacc.HeaderContainer.Controls.Add(new LiteralControl(NombreSeccion));
                GridView auxgrid = new GridView();
                auxgrid.DataSource = RetrievedValues;
                auxgrid.CellPadding = 4;
                auxgrid.GridLines = GridLines.None;
                auxgrid.Width = 280;
                auxgrid.HorizontalAlign = HorizontalAlign.Center;
                auxgrid.ID = "GridViewElementos@" + NombreSeccion;
                auxgrid.Style.Value = "text-align: center; padding: 5px 5px 5px 100px;";
                auxgrid.DataBind();
                auxgrid.HeaderRow.Cells[0].Text = "Nombre de elemento:";
                List<String> NombreElemento = new List<String>();
                NombreElemento = RecibirElementos(NombreProyecto, NombreSeccion);
                foreach (GridViewRow objRow in auxgrid.Rows)
                {
                    TableCell tcCheckCell = new TableCell();
                    CheckBox chkCheckBox = new CheckBox();
                    chkCheckBox.ID = "chkElementoEscoger" + auxi;
                    for (int k = 0; k < NombreElemento.Count; k++)
                    {
                        if (NombreElemento[k].Equals(objRow.Cells[0].Text.ToString()))
                        {
                            chkCheckBox.Checked = true;
                            chkCheckBox.Enabled = false;
                        }
                    }
                    tcCheckCell.Controls.Add(chkCheckBox);
                    objRow.Cells.AddAt(1, tcCheckCell);
                    auxi++;
                }
                auxacc.ContentContainer.Controls.Add(auxgrid);
                AccordionCtrl.Panes.Add(auxacc);
            }

        }

        /// <summary>
        /// Recibe la data enviada por post en la pantalla anterior
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        private void RecibirData(String NombreProyecto)
        {
            int j = 0;
            while (Request.QueryString["SECCION" + j] != null)
            {
                String aux = Request.QueryString["SECCION" + j].ToString();
                Console.WriteLine(aux);
                LlenaAcordionPane(NombreProyecto, aux);
                j++;

            }
        }

        /// <summary>
        /// Invoca LlenaAcordionPane pasandole la seccion correspondiente
        /// y el nombre del proyecto para el documento
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        protected void LlenaAcordiones(String NombreProyecto)
        {
            List<String> nomsec = new List<string>();
            nomsec = RecibirSecciones(NombreProyecto);
            for (int i = 0; i < nomsec.Count; i++)
            {
                LlenaAcordionPane(NombreProyecto, nomsec[i]);
            }
        }

        /// <summary>
        /// Trae las secciones fijadas por el usuario
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        /// <returns>Retorna las secciones en una lista de String</returns>
        protected List<String> RecibirSecciones(String NombreProyecto)
        {
            return sqlers.SelectSeccionesFijadas(NombreProyecto);
        }

        /// <summary>
        /// Recibe los elementos dependiendo de la seccion
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        /// <param name="NombreSeccion">Contiene el nombre de la seccion</param>
        /// <returns>Retorna los elementos en una lista de String</returns>
        protected List<String> RecibirElementos2(String NombreProyecto, String NombreSeccion)
        {
            return sqlers.SelectElementosSeccionErs2(NombreProyecto, NombreSeccion);
        }

        /// <summary>
        /// Recibe los elementos dependiendo de la seccion si ya se encuentran 
        /// asignados al documento ERS
        /// </summary>
        /// <param name="NombreProyecto">Contiene el nombre del proyecto</param>
        /// <param name="NombreSeccion">Contiene el nombre de la seccion</param>
        /// <returns>Retorna los elementos en una lista de String</returns>
        protected List<String> RecibirElementos(String NombreProyecto, String NombreSeccion)
        {
            return sqlers.SelectElementosSeccionErs(NombreProyecto, NombreSeccion);
        }

        protected void BotonCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("../../index.aspx");

        }

        protected void BotonSiguiente_Click(object sender, EventArgs e)
        {
            RecoleccionRespuesta();
            Response.Redirect(postdata);
        }

        protected void BotonAtras_Click(object sender, EventArgs e)
        {
            Response.Redirect("../ERS/ModificarErsSecciones.aspx");
        }

        //metodo para mostrar ventanas de alerta
        public static void ShowAlertMessage(string error)
        {

            Page page = HttpContext.Current.Handler as Page;
            if (page != null)
            {
                error = error.Replace("'", "\'");
                ScriptManager.RegisterStartupScript(page, page.GetType(), "err_msg", "alert('" + error + "');window.location='../../index.aspx';", true);
            }
        }

    }
}